锁的隔离级别
事务隔离级别 |
脏读 |
不可重复读 |
幻读 |
读未提交(read-uncommitted) |
是 |
是 |
是 |
读已提交(read-committed) |
否 |
是 |
是 |
可重复读(repeatable-read) |
否 |
否 |
是 |
串行化(serializable)) |
否 |
否 |
否 |
锁的分类
粒度划分
- 行锁:Record Lock、Gap Lock、Next-Key Lock
- 表锁
- 页面锁
级别划分
- 读锁(Share Locks,S锁)
- 写锁(Exclusive Locks,简称X锁)
- 意向读锁(IS):事务打算给数据行加行共享锁,事务在给一个数据行加共享锁前必须先取得该表的IS锁
- 意向写锁(IX):事务打算给数据行加行排他锁,事务在给一个数据行加排他锁前必须先取得该表的IX锁
是否兼容 |
X |
IX |
S |
IS |
X |
冲突 |
冲突 |
冲突 |
冲突 |
IX |
冲突 |
兼容 |
冲突 |
兼容 |
S |
冲突 |
冲突 |
兼容 |
兼容 |
IS |
冲突 |
兼容 |
兼容 |
兼容 |
加锁流程
- 加锁的基本单位是 next-key lock,锁是加在索引上的
- 查找过程中,访问到的对象才会加锁
- 索引上的等值查询,给唯一索引加锁的时候,next-key lock退化为行锁
- 索引上的等值查询,向右遍历时且最后一个值不满足等值条件的时候,next-key lock退化为间隙锁
- 唯一索引上的范围查询会访问到不满足条件的第一个值为止。
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。